#ifndef BASE_SERIALPORT_H
#define BASE_SERIALPORT_H
#include <QSerialPort>
#include <QByteArray>
#include <QMetaEnum>
#include <QObject>

class BaseSerialport : public QObject
{
    Q_OBJECT
public:
    BaseSerialport();
    virtual ~BaseSerialport();

signals:
    void openResult(bool isOpen);
    /**
     * @brief 发送解析出的数据包
     *
     * @param data 完整数据包
     */
    void sendData(QByteArray data);

public slots:
    /**
     * @brief 打开串口
     *
     * @param portName 串口号
     * @param baudRate 波特率
     * @param dataBits 数据位
     * @param parity 校验位
     * @param stopBits 停止位
     */
    virtual void open(const QString &portName,
                      QSerialPort::BaudRate baudRate,
                      QSerialPort::DataBits dataBits,
                      QSerialPort::Parity parity,
                      QSerialPort::StopBits stopBits);

    virtual void close();

    virtual bool send(QByteArray data);

protected slots:
    virtual void onReadyRead();

    void onErrorOccurred(QSerialPort::SerialPortError error);

private:
    bool parsePacket(QByteArray &packetData);

protected:
    QSerialPort *serialPort;
    QByteArray bufferByteArray;

    static const int MAX_BUFFER_SIZE;
};

#endif // BASE_SERIALPORT_H
